home *** CD-ROM | disk | FTP | other *** search
/ AOL File Library: 2,801 to 2,900 / aol-file-protocol-4400-2801-to-2900.zip / AOLDLs / C++ Files Library / MRDiim, 3D World Shell / MRDiim.sit / MRDiim / MRDiim.cp < prev    next >
Text File  |  1994-12-19  |  6KB  |  171 lines

  1. #include<QDOffScreen.h>
  2. #include"Utils_General.h"
  3. #include"MRRachet.h"
  4. #include"MREyeBall.h"
  5. #include"MRConstruction.h"
  6. #include"MRDiim.h"
  7. #include <math.h>
  8.  
  9.     MRDoom::MRDoom(short Number,Boolean toMark): MREyeBall(Number,toMark)
  10. {
  11.     // slide is a timer specific to each window, set on it's doidlewindow
  12.     slide=0;
  13.     // facing is the angle you are facing in radians
  14.     facing=0;
  15.     // half circle allows representation of 360 degrees of the circle when using tan (which returns 0-180 degrees)
  16.     halfCircle=false;
  17.     // starting postion
  18.     myself.myX=5;
  19.     myself.myY=10;
  20.     // refresh window on next doidlewindow
  21.     DirtyWindow=true;
  22.     //  build the world.
  23.     myConstruction= new MRConstruction();
  24.  
  25.     // posts
  26. //    myConstruction -> AddConstruction(ReturnChartPost(0,0));
  27. //    myConstruction -> AddConstruction(ReturnChartPost(1,1));
  28. //    myConstruction -> AddConstruction(ReturnChartPost(2,2));
  29. //    myConstruction -> AddConstruction(ReturnChartPost(3,3));
  30. //    myConstruction -> AddConstruction(ReturnChartPost(3,6));
  31. //    myConstruction -> AddConstruction(ReturnChartPost(6,3));
  32. //    myConstruction -> AddConstruction(ReturnChartPost(6,6));
  33. //    myConstruction -> AddConstruction(ReturnChartPost(7,7));
  34. //    myConstruction -> AddConstruction(ReturnChartPost(8,8));
  35. //    myConstruction -> AddConstruction(ReturnChartPost(9,9));
  36.     //  walls.  use either 0 or 1 for the last argument (texture set)
  37.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(2,4),ReturnChartPost(4,4)),1);
  38.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(4,4),ReturnChartPost(4,2)),0);
  39.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(4,2),ReturnChartPost(6,2)),0);
  40.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(6,2),ReturnChartPost(6,4)),0);
  41.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(6,4),ReturnChartPost(8,4)),0);
  42.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(8,4),ReturnChartPost(8,8)),0);
  43.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(8,8),ReturnChartPost(6,8)),0);
  44.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(6,8),ReturnChartPost(6,6)),0);
  45.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(6,6),ReturnChartPost(4,6)),0);
  46.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(4,6),ReturnChartPost(4,8)),0);
  47.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(4,8),ReturnChartPost(2,8)),0);
  48.     myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(2,8),ReturnChartPost(2,4)),0);
  49.     // boundries
  50. //    myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(0,0),ReturnChartPost(10,0)));
  51. //    myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(0,0),ReturnChartPost(0,10)));
  52. //    myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(10,0),ReturnChartPost(10,10)));
  53. //    myConstruction -> AddConstruction(ReturnChartWall(ReturnChartPost(0,10),ReturnChartPost(10,10)));
  54.  
  55.     
  56.     
  57. }
  58.     MRDoom::~MRDoom(void)
  59. {
  60.     delete (myConstruction);
  61. }
  62.  
  63. void        *MRDoom::NewRachet(short Number,Boolean toMark)
  64. {
  65.     return(new MRDoom(Number,toMark));
  66. }
  67.  
  68. void        MRDoom::ZapRachet(Ptr toBeZapped)
  69. {
  70.     delete (MRDoom *) toBeZapped;
  71. }
  72.  
  73. void    MRDoom::DoGWorldContent(void)
  74. { // fill up the gworld with content.  Pen & colors have been saved by class . Port has been set.
  75.     short        countX=0,countY=0;
  76.     Point        refPoint={0,0};
  77.     
  78.  
  79.     RGBForeColor(&BlackPen);
  80.     // find locations, mark, and prepStart.
  81.     myConstruction->FindActors(myself,facing,halfCircle);
  82.     myConstruction->PrepScanStart();
  83.     // while marked, scan construction, build next thing, and reprep
  84.     while(myConstruction->HasRachetsOfPolarity(true))
  85.     {
  86.         myConstruction->ScanConstruction();
  87.         myConstruction->PrepScan();
  88.     }
  89. }
  90.  
  91. void    MRDoom::DoKeyDown(EventRecord event,char key)
  92. {  // handle keys application doesn't want
  93.     ChartPost    oldSelf=myself;
  94.     
  95.     switch(key)
  96.     {
  97.     case '7':  // rotate left
  98.     {
  99.         facing-=RotateAmount;
  100.         break;
  101.     }
  102.     case '9':  // rotate right
  103.     {
  104.         facing+=RotateAmount;
  105.         break;
  106.     }
  107.     case '8': // move forward
  108.     {
  109.         myself.myX-= cos(facing+MyHalfPi)*(halfCircle? -1:1)*HumanStep;
  110.         myself.myY-= sin(facing+MyHalfPi)*(halfCircle? -1:1)*HumanStep;
  111.         break;
  112.     }
  113.     case '4':  // move left
  114.     {
  115.         myself.myX-= cos(facing)*(halfCircle? -1:1)*HumanStep;
  116.         myself.myY-= sin(facing)*(halfCircle? -1:1)*HumanStep;
  117.         break;
  118.     }
  119.     case '2': // move back
  120.     {
  121.         myself.myX+= cos(facing+MyHalfPi)*(halfCircle? -1:1)*HumanStep;
  122.         myself.myY+= sin(facing+MyHalfPi)*(halfCircle? -1:1)*HumanStep;
  123.         break;
  124.     }
  125.     case '6': // move right
  126.     {
  127.         myself.myX+= cos(facing)*(halfCircle? -1:1)*HumanStep;
  128.         myself.myY+= sin(facing)*(halfCircle? -1:1)*HumanStep;
  129.         break;
  130.     }
  131.     default:
  132.         SysBeep(30);    
  133.     }
  134.     if(!myConstruction->ProposedMove(myself) && !GudMode)
  135.         myself=oldSelf;  // not a good move
  136.     else
  137.     {
  138.         DirtyWindow=true;  // better refresh window next idle pass
  139.         NormalizeAngle(facing, halfCircle);
  140.     }
  141.         
  142. }
  143.  
  144.  
  145.  
  146. void    MRDoom::DoIdleWindow(void)
  147. { // called when there are no other events to handle.  active/front window gets call only
  148.  
  149.     slide+=1;
  150.     if(slide>95)
  151.         slide=0;
  152.     if(DirtyWindow)
  153.     {
  154.         DoUpdateGWorld();
  155.         FixTopWindow(GetStoreWindow());
  156.         DirtyWindow=false;
  157.     }
  158. }
  159.  
  160. void    MRDoom::ClearWindowContent(WindowPtr window)
  161. { // called by the window class after setting port and before calling content
  162.     Rect    myWindRect=window->portRect;
  163.     myWindRect.bottom=HorizonLine;
  164.     RGBForeColor(&CyanPen);
  165.     FillRect(&myWindRect,black);
  166.     myWindRect=window->portRect;
  167.     myWindRect.top=HorizonLine;
  168.     RGBForeColor(&BluePen);
  169.     FillRect(&myWindRect,black);    
  170. }
  171.